home *** CD-ROM | disk | FTP | other *** search
-
-
-
- FFFFFFFFTTTT((((3333FFFF)))) FFFFFFFFTTTT((((3333FFFF))))
-
-
-
- NNNNAAAAMMMMEEEE
- FFT, libfft - libcomplib.sgimath - Fast Fourier Transforms
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- A set of Fast Fourier Transform (FFT) modules, fully optimized for SGI
- computers. On parallel systems, Multi Dimensional FFTs, as well as large
- 1D transforms are computed in parallel. The FFT modules are provided with
- both a C and a Fortran interface. They are part of the complib.sgimath
- library.
-
- These modules include:
- - One, multiple one, two and three dimensional FFTs, real to complex,
- complex to real and complex to complex, in single and double precision.
- - Scaling routines.
- - Fourier Product routines.
-
-
- CCCC iiiinnnntttteeeerrrrffffaaaacccceeee
- For the C interface two types "complex" and "zomplex" have been defined
- as structures of two floating point variables ( re, im ). They are
- equivalent to the "complex" and "double complex" Fortran types.
-
- typedef struct {
- float re;
- float im; } complex;
-
- typedef struct {
- double re;
- double im; } zomplex;
-
- These types as well as the prototypes of the different functions for FFTs
- are defined in the "/usr/include/fft.h" header file.
-
-
- In C, _M_u_l_t_i _D_i_m_e_n_s_i_o_n_a_l _s_e_q_u_e_n_c_e_s are actually stored into a 1D array
- (contiguous data). For example, an MxN 2D sequence must be stored into an
- array of size LxN (M <= L), and the sample at index (i,j) is actually
- stored as element Array[i+L*j] -
-
-
- NNNNAAAAMMMMIIIINNNNGGGG CCCCOOOONNNNVVVVEEEENNNNTTTTIIIIOOOONNNNSSSS
- _I_n_i_t_i_a_l_i_z_a_t_i_o_n - ccccfffffffftttt____ddddiiii,,,, zzzzfffffffftttt____ddddiiii,,,, ssssfffffffftttt____dddduuuuiiii,,,, ddddfffffffftttt____dddduuuuiiii::::
- initialize the twiddle factors needed for the FFT computation, e.g.
- cfft1di.
-
- _C_o_m_p_u_t_a_t_i_o_n -
- ccccfffffffftttt____dddd,,,, zzzzfffffffftttt____dddd ::::
- compute the Direct Fourier Transform or the Inverse Fourier Transform
- complex data, e.g. zfft2d.
- ssssccccfffffffftttt____dddduuuu,,,, ddddzzzzfffffffftttt____dddduuuu ::::
- Direct Fourier Transform of a real array input. Although the transform
- is performed in place, the output is to be considered as an array of
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- FFFFFFFFTTTT((((3333FFFF)))) FFFFFFFFTTTT((((3333FFFF))))
-
-
-
- complex data, e.g. scfftm1du.
- ccccssssfffffffftttt____dddduuuu,,,, zzzzddddfffffffftttt____dddduuuu :::: Inverse Fourier Transform for a real value sequence.
- Although the transform is performed in place, the input is taken as a
- Complex value sequence, while the ouput is a real sequence. (e.g.
- zdfft1du).
-
- _F_o_u_r_i_e_r _P_r_o_d_u_c_t - ccccpppprrrroooodddd____dddd,,,, zzzzpppprrrroooodddd____dddd,,,, sssspppprrrroooodddd____dddduuuu,,,, ddddpppprrrroooodddd____dddduuuu::::
- in place product of the Fourier Transform of a sequence with the Fourier
- Transform of a filter, e.g. cprod3d .
- (The product of the two Fourier Transforms is equal to the tranform of
- the convolution of the two corresponding sequences.)
-
-
- _S_c_a_l_i_n_g - ssssssssccccaaaallll____dddduuuu,,,, ddddssssccccaaaallll____dddduuuu,,,, ccccssssccccaaaallll____dddd,,,, zzzzssssccccaaaallll____dddd ::::
- Scales the sequence by a real value, e.g. dscal2du . This may be usefull
- as the FFTs are not normalized and after a double call( direct-transform,
- inverse-transform) the final output is equal to the input scaled by the
- number of samples.
-
- SSSSUUUUMMMMMMMMAAAARRRRYYYY
- NNNNOOOOTTTTEEEE:::: The Development Magic (-o32) FFT library differs from the -n32/-64
- FFT library. The -o32 FFT library contains only a subset of the routines
- in the -n32/-64 library. See the o32fft man page for details.
-
- FFFFuuuunnnnccccttttiiiioooonnnnssss aaaannnndddd RRRRoooouuuuttttiiiinnnneeeessss::::
- -----------------------------------------------------------------------
- | | | Multiple | | |
- | | 1 Dimension | 1 Dimension | 2 Dimensions | 3 Dimensions |
- | | | | | |
- -----------------------------------------------------------------------
- | REAL | scfft1dui | scfftm1dui | scfft2dui | scfft3dui |
- | to | scfft1du | scfftm1du | scfft2du | scfft3du |
- | COMPLEX | csfft1du | csfftm1du | csfft2du | csfft3du |
- | | sprod1du | sprodm1du | sprod2du | sprod3du |
- | Single | sscal1d | sscalm1d | sscal2d | sscal3d |
- | Precision | | | | |
- -----------------------------------------------------------------------
- | REAL | dzfft1dui | dzfftm1dui | dzfft2dui | dzfft3dui |
- | to | dzfft1du | dzfftm1du | dzfft2du | dzfft3du |
- | COMPLEX | zdfft1du | zdfftm1du | zdfft2du | zdfft3du |
- | | dprod1du | dprodm1du | dprod2du | dprod3du |
- | Double | dscal1d | dscalm1d | dscal2d | dscal3d |
- | Precision | | | | |
- -----------------------------------------------------------------------
- | COMPLEX | | | | |
- | to | cfft1di | cfftm1di | cfft2di | cfft3di |
- | COMPLEX | cfft1d | cfftm1d | cfft2d | cfft3d |
- | | cprod1d | cprodm1d | cprod2d | cprod3d |
- | Single | cscal1d | cscalm1d | cscal2d | cscal3d |
- | Precision | | | | |
- -----------------------------------------------------------------------
- | COMPLEX | | | | |
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- FFFFFFFFTTTT((((3333FFFF)))) FFFFFFFFTTTT((((3333FFFF))))
-
-
-
- | to | zfft1di | zfftm1di | zfft2di | zfft3di |
- | COMPLEX | zfft1d | zfftm1d | zfft2d | zfft3d |
- | | zprod1d | zprodm1d | zprod2d | zprod3d |
- | Double | zscal1d | zscalm1d | zscal2d | zscal3d |
- | Precision | | | | |
- -----------------------------------------------------------------------
-
-
- LLLLIIIINNNNKKKKIIIINNNNGGGG wwwwiiiitttthhhh ccccoooommmmpppplllliiiibbbb....ssssggggiiiimmmmaaaatttthhhh
- _C _p_r_o_g_r_a_m_s:
- for serial binaries
- cccccccc ----oooo mmmmyyyy____eeeexxxxeeee mmmmyyyy____ssssoooouuuurrrrcccceeee....cccc ----llllccccoooommmmpppplllliiiibbbb....ssssggggiiiimmmmaaaatttthhhh
- for parallel executables
- cccccccc ----oooo mmmmyyyy____ppppaaaarrrraaaalllllllleeeellll____eeeexxxxeeee mmmmyyyy____ssssoooouuuurrrrcccceeee....cccc ----llllccccoooommmmpppplllliiiibbbb....ssssggggiiiimmmmaaaatttthhhh____mmmmpppp ----mmmmpppp
-
- _F_o_r_t_r_a_n _p_r_o_g_r_a_m_s:
- for serial binaries
- ffff77777777 ----oooo mmmmyyyy____eeeexxxxeeee mmmmyyyy____ssssoooouuuurrrrcccceeee....ffff ----llllccccoooommmmpppplllliiiibbbb....ssssggggiiiimmmmaaaatttthhhh
- for parallel executables
- ffff77777777 ----oooo mmmmyyyy____ppppaaaarrrraaaalllllllleeeellll____eeeexxxxeeee mmmmyyyy____ssssoooouuuurrrrcccceeee....ffff ----llllccccoooommmmpppplllliiiibbbb....ssssggggiiiimmmmaaaatttthhhh____mmmmpppp ----mmmmpppp
-
-
- PPPPEEEERRRRFFFFOOOORRRRMMMMAAAANNNNCCCCEEEE
- To be _F_a_s_t the _F_a_s_t _F_o_u_r_i_e_r _T_r_a_n_s_f_o_r_m relies on the factorization of the
- array size into small prime factors. The smaller the factors, the lesser
- the floating point operations required. E.g. a 1D Fourier transform of
- size 899(29*31) is much more expensive to compute than one of size
- 900(2*2*3*3*5*5), (roughly ten times more floating point operations).
-
- To boost performance special code exists for Radices 2, 3, 4 and 5. Note,
- the radix 4 is equivallent to a double radix 2 implementation, but it
- reduces computation cost by 15%.
-
- For Multiple 1D, or 2D or 3D FFTs, although the same computation could be
- performed using 1D FFTs in a loop, the corresponding modules are more
- efficient as they involve less overhead, and as the individual 1D FFTs
- can be pipelined together.
-
- Furthermore, the Multiple 1D, or 2D or 3D modules are parallel, thus
- enabling another performance level increase without any work in the user
- source.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- o32fft
-
- cfft1d, cfftm1d, cfft2d, cfft3d, cfft1di, cfftm1di, cfft2di, cfft3di,
- zfft1d, zfftm1d, zfft2d, zfft3d, zfft1di, zfftm1di, zfft2di, zfft3di,
- scfft1du, csfft1du, scfft1dui, dzfft1du, zdfft1du, dzfft1dui,
- scfftm1du, csfftm1du, scfftm1dui, dzfftm1du, zdfftm1du, dzfftm1dui,
- scfft2du, csfft2du, scfft2dui, dzfft2du, zdfft2du, dzfft2dui,
- scfft3du, csfft3du, scfft3dui, dzfft3du, zdfft3du, dzfft3dui,
-
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- FFFFFFFFTTTT((((3333FFFF)))) FFFFFFFFTTTT((((3333FFFF))))
-
-
-
- cprod1d, zprod1d, sprod1du, dprod1du,
- cprodm1d, zprodm1d, sprodm1du, dprodm1du,
- cprod2d, zprod2d, sprod2du, dprod2du,
- cprod3d, zprod3d, sprod3du, dprod3du,
-
- cscal1d, zscal1d, sscal1d, dscal1d,
- cscalm1d, zscalm1d, sscalm1d, dscalm1d,
- cscal2d, zscal2d, sscal2d, dscal2d,
- cscal3d, zscal3d, sscal3d, dscal3d
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-
-
-
-